#include <iostream>
#include <functional>

void call_when_event(int x, const std::function<void(int)> &f)
{
    if(!(x & 1))
    {
        f(x);
    }
}

void call_when_event(int x, int y, const std::function<void(int, int)> &f)
{
    if(!(x & 1))
    {
        f(x,y);
    }
}

void output(int x)
{
    std::cout << x << " ";
}

void output_add_2(int x, int y)
{
    std::cout << x + y << " ";
}

int main(void)
{
    {
        auto fr = std::bind(output, std::placeholders::_1); //占位符 占据第一个位置,一共有29个， 从1~29
        for(int i = 0; i < 10; ++i)
        {
            call_when_event(i, fr);
        }
        std::cout << std::endl;
        //std::placeholders::_1 是一个占位符，代表这个位置将在函数调用时，被传入的第一个参数所替代
    }

    {
        auto fr = std::bind(output_add_2, std::placeholders::_1, std::placeholders::_2);//两个占位符
        for(int i = 0; i < 10; ++i)
        {
            call_when_event(i, i,  fr);
        }
        std::cout << std::endl;
    }

    return 0;
}
